var center = new BMap.Point(-73.985696, 40.748452); // 地图中心点
// 实时站点信息数据
// var info_url="https://gbfs.citibikenyc.com/gbfs/en/station_information.json";
var info_url = "realtimeData/infoData";
// 实时站点状态数据
// var status_url="https://gbfs.citibikenyc.com/gbfs/en/station_status.json";
var status_url = "realtimeData/statusData";
// 地图大图标的size
var bigIconSize = new BMap.Size(42, 50);
// 地图大图标对应图片的size
var bigImageSize = new BMap.Size(42, 50);
// 地图大图标的锚点的size
var bigAnchorSize = new BMap.Size(21, 50);
// 地图停车桩大图标的size
var bigDockIconSize = new BMap.Size(32, 40);
// 地图大图标对应图片的size
var bigDockImageSize = new BMap.Size(32, 40);
// 地图大图标的锚点的size
var bigDockAnchorSize = new BMap.Size(16, 40);
// 地图大图标使用的配置对象
var bigIconOpts = {
	anchor : bigAnchorSize,
	imageSize : bigImageSize
}
// 地图停车桩大图标使用的配置对象
var bigDockIconOpts = {
	anchor : bigDockAnchorSize,
	imageSize : bigDockImageSize
}
// 地图大图标使用的Icon的数组
var bigIconArr = [ new BMap.Icon("img/bi_0.png", bigIconSize, bigIconOpts),
		new BMap.Icon("img/bi_1.png", bigIconSize, bigIconOpts),
		new BMap.Icon("img/bi_2.png", bigIconSize, bigIconOpts),
		new BMap.Icon("img/bi_3.png", bigIconSize, bigIconOpts),
		new BMap.Icon("img/bi_4.png", bigIconSize, bigIconOpts) ]

// 地图大图标的size
var smallIconSize = new BMap.Size(10, 10);
// 地图大图标对应图片的size
var smallImageSize = new BMap.Size(10, 10);
// 地图大图标的锚点的size
var smallAnchorSize = new BMap.Size(5, 10);
// 地图大图标使用的配置对象
var smallIconOpts = {
	anchor : smallAnchorSize,
	imageSize : smallImageSize
}
// 地图小图标使用的Icon的数组
var smallIconArr = [
		new BMap.Icon("img/si_0.png", smallIconSize, smallIconOpts),
		new BMap.Icon("img/si_1.png", smallIconSize, smallIconOpts),
		new BMap.Icon("img/si_2.png", smallIconSize, smallIconOpts),
		new BMap.Icon("img/si_3.png", smallIconSize, smallIconOpts),
		new BMap.Icon("img/si_4.png", smallIconSize, smallIconOpts) ]
var isBigIcon = true; // 当前是否使用大图标
var markerArr = []; // 保存所有Marker的数组

// 保存站点bikeLevel的Map
var bikeLevelMap = new Map();
// 保存站点信息窗所需数据的Map
var sContentDataMap = new Map();
// 保存站点经纬度
var staLocateInfoMap = new Map();

var sContentTemp = "<div class='mapbox-content'>"
		+ "<div class='mapbox-content-top'>"
		+ "<span class='window_lastUpdate'> 0 ms ago </span>"
		+ "<span class='window_info_button'></span>"
		+ "</div>"
		+ "<div class='mapbox-content-header'>"
		+ "<h1 class='mapbox-content-header-stationName'>[stationName]</h1>"
		+ "</div>"
		+ "<div class='mapbox-content-detail'>"
		+ "<div class='mapbox-content-detail-bikes-available'>"
		+ "<span class='mapbox-content-detail-bikes-available-val'> [nba] </span>"
		+ "<span class='mapbox-content-detail-bikes-available-lbl'>Bikes</span>"
		+ "</div>"
		+ "<div class='mapbox-content-detail-docks-available'>"
		+ "<span class='mapbox-content-detail-docks-available-val'> [nda] </span> "
		+ "<span class='mapbox-content-detail-docks-available-lbl'>Docks</span>"
		+ "</div>"
		+ "</div>"
		+ "<div class='mapbox-content-footer'>"
		+ "<span class='mapbox-content-footer-shortName'> Bike station: [shortName] </span>"
		+ "</div>" + "</div>";
var infoWindowOptsBig = {
	offset : new BMap.Size(0, -48)
}
var infoWindowOptsSmall = {
	offset : new BMap.Size(0, -5)
}

// 初始化地图
var map = new BMap.Map("container");
map.centerAndZoom(center, 15);
// 开启滚轮缩放
map.enableScrollWheelZoom(true);
// 添加平移缩放控件
var opts = {
	offset : new BMap.Size(15, 20), // x轴，y轴
	anchor : BMAP_ANCHOR_BOTTOM_RIGHT
} // 配置
map.addControl(new BMap.NavigationControl(opts));

//	hkccc's private code segment

//	// 创建中心点标注 
var centerMarker = new BMap.Marker(center); 
     
//	为中心点设置图标
var centerIcon = new BMap.Icon("img/center.png",new BMap.Size(40, 60),bigIconOpts);
centerMarker.setIcon(centerIcon); 

//	为中心点添加信息窗
var centerInfo = new BMap.InfoWindow("您所在位置",infoWindowOptsBig); 
centerMarker.addEventListener("click",function(){
			this.openInfoWindow(centerInfo);
	 });

//	中心点标注
map.addOverlay(centerMarker);

//	保存中心点附近一公里之内的站点数据的Map
var nearStationMap = new Map();

//添加自定义控件，设置控件位置为左上方
var cr = new BMap.CopyrightControl({anchor: BMAP_ANCHOR_TOP_LEFT});
map.addControl(cr);

//	end

var dragStartLat; // 临时保存拖拽起始点纬度
var dragStartLon; // 临时保存拖拽起始点经度
var zoomStartLevel; // 临时保存缩放起始级别

// Asia's private code segment
var marker;
var dockmarker;
var curSign;
var infoArr;
var userOptData = {};
// 地图大图标使用的Icon的数组
var bigDockIconArr = [
		new BMap.Icon("img/bd_0.png", bigDockIconSize, bigDockIconOpts),
		new BMap.Icon("img/bd_1.png", bigDockIconSize, bigDockIconOpts),
		new BMap.Icon("img/bd_2.png", bigDockIconSize, bigDockIconOpts),
		new BMap.Icon("img/bd_3.png", bigDockIconSize, bigDockIconOpts),
		new BMap.Icon("img/bd_4.png", bigDockIconSize, bigDockIconOpts) ]
// 保存站点dockLevel的Map
var dockLevelMap = new Map();
// Asia's private code segment

map.addEventListener("dragstart", function(e) {
	// 获取并记录起始点的经纬度
	dragStartLat = map.getCenter().lat;
	dragStartLon = map.getCenter().lng;
});
map.addEventListener("dragend", function(e) {
	// 获取终止点的经纬度
	dragEndLat = map.getCenter().lat;
	dragEndLon = map.getCenter().lng;
	var params = {
		optType : 1,
		dragStartLat : dragStartLat,
		dragStartLon : dragStartLon,
		dragEndLat : dragEndLat,
		dragEndLon : dragEndLon
	}
	// 调用方法将操作保存到数据库
	saveOperation(params);
	
	//	修改中心点坐标
	centerMarker.setPosition(map.getCenter());
	//	获取附近Top5站点
   	getNearStationMap();
   	getNearStationMapSort();
  	//	根据站点修改表格内容
  	optTable();
});

map.addEventListener("zoomstart", function(e) {
	zoomStartLevel = this.getZoom();
});

// 为地图绑定监听 Asia's private code segment
map.addEventListener("zoomend", function() {
	var zoomLevel = this.getZoom();
	if (curSign == true) {
		if (zoomLevel > 14 && isBigIcon == false) { // 应该使用大图标
			// 切换大图标
			switchIcon(false);
			isBigIcon = true;
		}
		if (zoomLevel < 15 && isBigIcon) { // 应该使用小图标
			// 切换小图标
			switchIcon(true)
			isBigIcon = false;
		}
	} else {
		if (zoomLevel > 14 && isBigIcon == false) { // 应该使用大图标
			// 切换大图标
			switchDockIcon(false);
			isBigIcon = true;
		}
		if (zoomLevel < 15 && isBigIcon) { // 应该使用小图标
			// 切换小图标
			switchDockIcon(true)
			isBigIcon = false;
		}
	}
	// 生成请求参数
	var params = {
		optType : 3,
		zoomStartLevel : zoomStartLevel,
		zoomEndLevel : zoomLevel
	}
	saveOperation(params);
});

// 发送AJAX请求，获取站点状态数据
$.get(status_url, function(statusData) {
	// console.log(statusData);
	var statusArr = statusData.data.stations;
	for ( var index in statusArr) {
		var status = statusArr[index];
		var nba = status.num_bikes_available;
		var nda = status.num_docks_available;
		var sid = status.station_id;
		// 计算站点的bikeLevel
		var bikeLevel = getBikeLevel(nba, nda);
		// 计算站点的dockLevel
		var dockLevel = getDockLevel(nba, nda);
		// 将站点的id和bikeLevel存入Map
		bikeLevelMap.set(sid, bikeLevel);
		// 将站点的id和dockLevel存入Map
		dockLevelMap.set(sid, dockLevel);
		// 将信息窗所需数据存入Map集合
		var obj = {
			sid : sid,
			nba : nba,
			nda : nda
		};
		sContentDataMap.set(sid, obj);
	}

	// 发送AJAX请求，获取站点信息数据
	$.get(info_url, function(infoData) {
		// infoArr改成了全局变量 by asia Asia's private code segment
		infoArr = infoData.data.stations;
		// console.log(infoData);
		for ( var index in infoArr) {
			var info = infoArr[index];
			// 将站点位置信息存入Map集合
			var stationName = info.name;
			var stationId = info.station_id;
			var lat = info.lat;
			var lon = info.lon;
			var locate = {
				stationName : stationName,
				stationId : stationId,
				lat : lat,
				lon : lon,
			};
			staLocateInfoMap.set(info.name, locate);
			// 从sContentDataMap中获取之前添加的数据对象
			var obj = sContentDataMap.get(info.station_id);
			// 向obj中绑定站点名称和缩略名
			obj.stationName = info.name;
			obj.shortName = info.short_name;
			//	向obj中添加经纬度信息，给hkccc用
			obj.lat = info.lat;
			obj.lon = info.lon;
			// 调用方法，生成站点标注
			addMarker(info.lon, info.lat, info.station_id);
			// curSign为true表示当前图标为自行车，否则为停车桩
			curSign = true;
			
			//	获取附近Top5站点
		   	getNearStationMap();
		   	getNearStationMapSort();
		  	//	根据站点修改表格内容
		  	optTable();
		}
	});
});

/**
 * 发送AJAX请求，记录一次用户操作的方法
 */
function saveOperation(params) {
	var url = "operation/save"
	// 发送AJAX请求
	$.post(url, params, function(result) {
		if (result.state == 2000) {
			console.log("操作保存成功");
		} else {
			console.log(result.msg);
		}
	});
}

/**
 * @param flag
 *            true-大换小 false-小换大
 */
function switchIcon(flag) {
	var tempArr;
	// 切换图标的逻辑
	if (flag) { // 大换小
		tempArr = smallIconArr;
	} else {
		tempArr = bigIconArr;
	}
	// 遍历所有的marker，修改它的Icon
	for ( var index in markerArr) {
		var marker = markerArr[index];
		marker.setIcon(tempArr[marker.bikeLevel]);
	}
}
// Asia's private code segment
function switchDockIcon(flag) {
	var tempArr;
	// 切换图标的逻辑
	if (flag) { // 大换小
		tempArr = smallIconArr;
	} else {
		tempArr = bigDockIconArr;
	}
	// 遍历所有的marker，修改它的Icon
	for ( var index in markerArr) {
		var marker = markerArr[index];
		marker.setIcon(tempArr[marker.dockLevel]);
	}
}
/**
 * 在地图上添加一个点标注的方法
 * 
 * @param lon
 *            站点的经度
 * @param lat
 *            站点的纬度
 * @param sid
 *            站点的id
 */
function addMarker(lon, lat, sid) {
	// 从Map中获取站点对应的bikeLevel
	var bikeLevel = bikeLevelMap.get(sid);
	// 获取bikeLevel对应的Icon对象
	var myIcon = bigIconArr[bikeLevel];
	// 声明地图的Point
	var point = new BMap.Point(lon, lat);
	// 创建Marker
	var marker = new BMap.Marker(point, {
		icon : myIcon
	}); // 创建标注
	// 为marker对象动态添加一个属性-bikeLevel，值为对应的bikeLevel
	marker.bikeLevel = bikeLevel;
	// 为marker对象动态添加一个属性-sid
	marker.stationId = sid;
	// 将marker添加到数组中
	markerArr.push(marker);
	// 创建信息窗口对象
	marker.addEventListener("click", function() {
		// 打开信息窗
		openInfoCard(marker, sid);
		// 生成请求参数
		var params = {
			optType : 2,
			stationId : sid
		}
		saveOperation(params);
	})
	map.addOverlay(marker); // 将标注添加到地图中
}

//LRY's private codo segment
function openInfoCard(marker, sid) {
	console.log("准备打开信息窗");
	//根据当前使用图表类型选择信息窗偏移量
	var infoOpts = isBigIcon ? infoWindowOptsBig : infoWindowOptsSmall;
	//创建信息窗
	var infoWindow = new BMap.InfoWindow(getSContent(sid), infoOpts);
	//打开信息窗
	marker.openInfoWindow(infoWindow);
	console.log(infoWindow.isOpen());
}

// Asia's private code segment
function addDockMarker(lon, lat, sid) {
	// 从Map中获取站点对应的bikeLevel
	var dockLevel = dockLevelMap.get(sid);
	// 获取bikeLevel对应的Icon对象
	var myIcon = bigDockIconArr[dockLevel];
	// 声明地图的Point
	var point = new BMap.Point(lon, lat);
	// 创建Marker
	dockmarker = new BMap.Marker(point, {
		icon : myIcon
	}); // 创建标注
	// 为marker对象动态添加一个属性-dockLevel，值为对应的dockLevel
	dockmarker.dockLevel = dockLevel;
	// 将marker添加到数组中
	markerArr.push(dockmarker);
	// 创建信息窗口对象
	dockmarker.addEventListener("click", function() {
		// 根据当前使用图表类型选择信息窗偏移量
		var infoOpts = isBigIcon ? infoWindowOptsBig : infoWindowOptsSmall;
		// 创建信息窗
		var infoWindow = new BMap.InfoWindow(getSContent(sid), infoOpts); // 为Marker添加点击事件-弹出信息窗
		// 打开信息窗
		this.openInfoWindow(infoWindow);
		var params = {
			optType : 2,
			stationId : sid
		}
		saveOperation(params);
	})
	map.addOverlay(dockmarker); // 将标注添加到地图中
}

function getSContent(sid) {
	// 通过sid获取所需信息
	var obj = sContentDataMap.get(sid);
	// 生成sContent
	var sContent = sContentTemp.replace("[stationName]", obj.stationName)
			.replace("[nba]", obj.nba).replace("[nda]", obj.nda).replace(
					"[shortName]", obj.shortName);
	// 返回拼接好数据的信息窗内容
	return sContent;
}

/**
 * 计算站点可用车级别的方法
 * 
 * @param nba
 *            可用车数量
 * @param nda
 *            可用桩数量
 * @return 0-4 5个级别
 */
function getBikeLevel(nba, nda) {
	if (nba + nda == 0 || nba == 0) {
		return 0;
	}
	var abi = nba / (nba + nda);
	if (abi < 0.2) {
		return 1;
	}
	if (abi < 0.5) {
		return 2;
	}
	if (abi < 1) {
		return 3;
	}
	if (abi == 1) {
		return 4;
	}
}
// Asia's private code segment
function getDockLevel(nba, nda) {
	if (nba + nda == 0 || nba == 0) {
		return 0;
	}
	var abi = nda / (nba + nda);
	if (abi < 0.2) {
		return 1;
	}
	if (abi < 0.5) {
		return 2;
	}
	if (abi < 1) {
		return 3;
	}
	if (abi == 1) {
		return 4;
	}
}
var showColor = 1;// 颜色变换标志 默认为1 表示选中单车 2表示选中停车桩
var div;
// 定义一个控件类,即function
function ZoomControl() {
	// 默认停靠位置和偏移量
	this.defaultAnchor = BMAP_ANCHOR_TOP_RIGHT;
	this.defaultOffset = new BMap.Size(150, 40);
}
// 通过JavaScript的prototype属性继承于BMap.Control
ZoomControl.prototype = new BMap.Control();
// 自定义控件必须实现自己的initialize方法,并且将控件的DOM元素返回
// 在本方法中创建个div元素作为控件的容器,并将其添加到地图容器中
ZoomControl.prototype.initialize = function(map) {
	// 创建一个DOM元素
	div = document.createElement("div");
	// 添加文字说明
	// div.appendChild(document.createTextNode("切换显示自行车图标"));
	// 设置样式
	div.style.cursor = "pointer";
	// div.style.border = "2px solid gray";
	div.style.backgroundImage = "url(img/bikeblue.png)";
	div.style.backgroundSize = "cover";
	div.style.width = "100px";
	div.style.height = "64px";
	// div.style.backgroundColor = "blue";
	// 绑定事件在这里实现
	div.onclick = function(e) {
		if (curSign == false) {
			// console.log("执行addBikemap.clearOverlays");
			map.clearOverlays();
			var zoomLevel = map.getZoom();
			for ( var index in infoArr) {

				var info = infoArr[index];
				addMarker(info.lon, info.lat, info.station_id);
				}
			curSign = true;
			console.log("改变为true");
			div.style.backgroundImage = "url(img/bikeblue.png)";
			div2.style.backgroundImage = "url(img/dockgray.png)";
		} else {
			console.log("当前为true");
			// div.style.backgroundImage = "url(img/bikegray.png)";
			
		}
		console.log("zoomLevel"+zoomLevel+"isBigIcon"+isBigIcon)
		if (zoomLevel > 14 && isBigIcon == true) { // 应该使用大图标
			// 切换大图标
			switchIcon(false);
			isBigIcon = true;
		}
		if (zoomLevel < 15 && isBigIcon == false) { // 应该使用小图标
			// 切换小图标
			switchIcon(true)
			isBigIcon = false;
		}
		//	切换完后，马上更新表格，hkccc写，有冲突找他
		//	获取附近Top5站点
	   	getNearStationMap();
	   	getNearStationMapSort();
	  	//	根据站点修改表格内容
	  	optTable();
	}
	// 添加DOM元素到地图中
	map.getContainer().appendChild(div);
	// 将DOM元素返回
	return div;
}
// 创建控件
var myZoomCtrl = new ZoomControl();
// 添加到地图当中
map.addControl(myZoomCtrl);

var div2;
// 定义一个控件类,即function
function ZoomControl2() {
	// 默认停靠位置和偏移量
	this.defaultAnchor = BMAP_ANCHOR_TOP_RIGHT;
	this.defaultOffset = new BMap.Size(50, 40);
}
// 通过JavaScript的prototype属性继承于BMap.Control
ZoomControl2.prototype = new BMap.Control();
// 自定义控件必须实现自己的initialize方法,并且将控件的DOM元素返回
// 在本方法中创建个div元素作为控件的容器,并将其添加到地图容器中
ZoomControl2.prototype.initialize = function(map) {
	// 创建一个DOM元素
	div2 = document.createElement("div");
	// 添加文字说明
	// div2.appendChild(document.createTextNode("切换显示停车桩图标"));
	// 设置样式
	div2.style.cursor = "pointer";
	// div2.style.border = "2px solid gray";
	div2.style.backgroundImage = "url(img/dockgray.png)";
	div2.style.backgroundSize = "100px 64px";
	div2.style.width = "100px";
	div2.style.height = "64px";
	// 绑定事件在这里实现
	div2.onclick = function(e) {
		var zoomLevel = map.getZoom();
		if (curSign == true) {
			// console.log("执行addDockmap.clearOverlays");
			map.clearOverlays();
			for ( var index in infoArr) {
				var info = infoArr[index];
				// console.log("执行addDock");
				addDockMarker(info.lon, info.lat, info.station_id);
			}
			console.log("改变为false");
			curSign = false;
			div2.style.backgroundImage = "url(img/dockblue.png)";
			div.style.backgroundImage = "url(img/bikegray.png)";
		} else {
			console.log("当前为false");
			// div2.style.backgroundImage = "url(img/dockgray.png)";
		}
		console.log("zoomLevel"+zoomLevel+"isBigIcon"+isBigIcon)
		if (zoomLevel > 14 && isBigIcon == true) { // 应该使用大图标
			// 切换大图标
			switchDockIcon(false);
			isBigIcon = true;
		}
		if (zoomLevel < 15 && isBigIcon == false) { // 应该使用小图标
			// 切换小图标
			switchDockIcon(true)
			isBigIcon = false;
		}
		//	切换完后，马上更新表格，hkccc写，有冲突找他
		//	获取附近Top5站点
	   	getNearStationMap();
	   	getNearStationMapSort();
	  	//	根据站点修改表格内容
	  	optTable();
	}
	// 添加DOM元素到地图中
	map.getContainer().appendChild(div2);
	// 将DOM元素返回
	return div2;
}
// 创建控件
var myZoomCtrl2 = new ZoomControl2();
// 添加到地图当中
map.addControl(myZoomCtrl2);
// end
// rory's private code segment
var bikesLanesLayer;//骑行图层
//var beautifybikesLanesLayer;//骑行美化图层
var bikeLanesDisplayed=false;//骑行路线图层是否开启
var dataSet;//骑行路线数据
var bikeLanesDiv;//骑行图层按钮DOM元素
var bikeLanesLayerOpts1 = {//骑行图层样式
		size: 5,
		unit: 'px',
		fillStyle: 'rgba(45,101,154,1)',
		strokeStyle: 'rgba(45,101,154,1)',
	 	draw: 'simple',
        lineWidth: 2
};
var bikeLanesLayerOpts2 = {
        fillStyle: 'rgba(255, 250, 250, 0.2)',
        coordType: 'bd09mc',
        globalCompositeOperation: "lighter",
        size: 1.5,
        animation: {
            stepsRange: {
                start: 0,
                end: 100 
            },
            trails: 3,
            duration: 5,
        },
        draw: 'simple'
    } 
// 自定义开启关闭Bike Lanes图层的控件  
function BikeLanesControl(){    
	// 设置默认停靠位置和偏移量  
	this.defaultAnchor = BMAP_ANCHOR_TOP_RIGHT;
    this.defaultOffset = new BMap.Size(10, 100);   
}    
BikeLanesControl.prototype = new BMap.Control();//继承自BMap.Control
BikeLanesControl.prototype.initialize = function(map){//定义构造函数，初始化控件
	// 创建一个DOM元素   
	bikeLanesDiv = document.createElement("div");
	bikeLanesDiv.id='bikeLanesBtn';
	// 添加文字说明
	var img = document.createElement("img");
	img.src = 'img/bikeLanes.png';
	img.style.width="32px";
	img.style.height="32px";
	//div.setAttribute("width","32");
	//div.setAttribute("height","32");
	bikeLanesDiv.appendChild(img);    
	// 设置样式    
	bikeLanesDiv.style.cursor = "pointer";
	bikeLanesDiv.style.backgroundColor="gray";
	// 绑定事件 
	bikeLanesDiv.onclick = onBikeLanesControlClicked;
	// 添加DOM元素到地图中   
	map.getContainer().appendChild(bikeLanesDiv);    
	// 将DOM元素返回  
	return bikeLanesDiv;    
	}
//添加自定义控件到map
map.addControl(new BikeLanesControl());

//请求自行车道数据
$.get("data/bikeLanes.json",function(data){
	dataSet = data.features;
	dataSet = new mapv.DataSet(dataSet);
	bikesLanesLayer = new mapv.baiduMapLayer(map,dataSet,bikeLanesLayerOpts1);
	bikeLanesDisplayed=true;
});

//骑行图层按钮点击事件
function onBikeLanesControlClicked(){
	if(bikeLanesDisplayed){//隐藏骑行图层
		bikesLanesLayer.hide();
		bikeLanesDiv.style.background='white';
		//beautifybikesLanesLayer.hide();
		bikeLanesDisplayed=false;
	}else{//显示骑行图层
		bikesLanesLayer.show();
		bikeLanesDiv.style.background='gray';
		//beautifybikesLanesLayer.show();
		bikeLanesDisplayed=true;
	}
}
// end

// hkccc's private code segment

/**
  * 遍历Map对象，取出距离中心点一公里的mark，保存到nearStationMap中
 */
function getNearStationMap(){
	//	获取地图中心点
	var endCenter = map.getCenter();
   	//	先初始化附近的mark
  	nearStationMap = new Map();
   	//	遍历计算
  	sContentDataMap.forEach(function(value,key,array){
	   var tPoint = new BMap.Point(value.lon,value.lat);
	   //	中心点与Map中的实例之间的距离（米）
	   var number = BMapLib.GeoUtils.getDistance(endCenter,tPoint);
	   if(number <= 1000){
		   var tobj = {
				   stationName:value.stationName,
				   shortName:value.shortName,
				   nba:value.nba,
				   nda:value.nda,
				   distance:number
				   }
		   nearStationMap.set(key,tobj);
		 }
   });
}

//	获取排名前5的站点
/**
 * nearStationMap 附近1公里之内的站点Map集合
 * curSign 为true时根据nba从大到小排，为false时根据nda排，数值相等时按距离从小到大排
  *  将Map集合赋值给nearStationMap
 */
function getNearStationMapSort(){
	var arrayObj=Array.from(nearStationMap);
	var str;
	if(curSign==true){
		arrayObj.sort(function(a,b){
			if((b[1].nba-a[1].nba)!=0){
				return b[1].nba-a[1].nba;
			}
			else{
				return a[1].distance-b[1].distance;
			}
		});
	}else{
		arrayObj.sort(function(a,b){
			if((b[1].nda-a[1].nda)!=0){
				return b[1].nda-a[1].nda;
			}
			else{return a[1].distance-b[1].distance;}
			});
	}
	//	只取前5
	arrayObj = arrayObj.slice(0,5);
	nearStationMap = new Map(arrayObj.map(i => [i[0], i[1]]));
}

/**
  * 打开表格点击行中站点的信息窗
 * @param self 表示当前点击的行
 */
function openStation(self){
	var sid = self.firstElementChild.innerHTML;
	//console.log("表格的sid：",sid);
	for(var index in markerArr){
		 var marker = markerArr[index];
		 //console.log("marker的sid：",marker.sid);
		 if(marker.stationId == sid){
			 var info = new BMap.InfoWindow(getSContent(sid),infoWindowOptsBig);
			 map.openInfoWindow(info,marker.getPosition());
			 break;
		 }
	}
}

/**
  * 在地图上创建自定义表格控件，放于左上方
 * @param str 添加控件的html语句
 */
function addTable(str){
	//	返回地图可视区域
	var bs = map.getBounds();
	cr.addCopyright({id: 1, content:str,bounds:bs});
}

/**
  * 对表格进行操作，在其中显示数量排名前5的站点id、数量和距离
 */
function optTable(){
	cr.removeCopyright(1);
	var str="<table id='tab'>";
	if(curSign==true){
		//	添加表头
		str += '<tr onclick=openCenter()>'+
		'<th style="font-size:18px;" colspan="3">附近站点推荐</th></tr>';
		str += '<tr onclick=openCenter()>'+
							'<th>&nbsp;&nbsp;站点id&nbsp;&nbsp;</th>'+
							'<th>&nbsp;&nbsp;单车数&nbsp;&nbsp;</th>'+
							'<th>距离（m）</th>'+
						'</tr>';
		//	遍历前五站点
		nearStationMap.forEach(function(value,key,array){
			str += '<tr onclick=openStation(this)>'+
								'<td>'+key+'</td>'+
								'<td>'+value.nba+'</td>'+
								'<td>'+value.distance+'</td>'+
							'</tr>';
		   }); 
	}else{
		//	添加表头
		str += '<tr><th style="font-size:18px;" colspan="3">附近站点推荐</th></tr>';
		str += '<tr>'+
							'<th>&nbsp;&nbsp;站点id&nbsp;&nbsp;</th>'+
							'<th>&nbsp;&nbsp;车桩数&nbsp;&nbsp;</th>'+
							'<th>距离（m）</th>'+
						'</tr>';
		//	遍历前五站点
		nearStationMap.forEach(function(value,key,array){
			str += '<tr onclick=openStation(this)>'+
								'<td>'+key+'</td>'+
								'<td>'+value.nda+'</td>'+
								'<td>'+value.distance+'</td>'+
							'</tr>';
		   }); 
	}
	//	封闭str
	str += "</table>"
	//console.log(str);
	addTable(str);
}

/**
  * 打开中心点窗口
 */
function openCenter(){
	centerMarker.openInfoWindow(centerInfo);
}

// end

// Asia's private code segment

// end

/*
 **Late-whale Code Area  Begin
 */

 /*我添加了一个marker的右击事件，右击第一次选择起点，右击第二次选择终点
   起点终点选择完之后，点击左上角的Go now就给百度发送数据请求
   请求事件主要在GO函数里面
 */

 //禁用双击缩放地图
 map.disableDoubleClickZoom();

 //起点
 var startPoint=0;
 //终点
 var endPoint=0;
 //最终path路径点
 var pois =[];
 // var clickCount=0;
 // //起点点击事件
 var infoWindow=null;
 map.addEventListener("rightclick",
     function(e){
         endPoint = new BMap.Point(e.point.lng, e.point.lat)
         var content = e.point.lng+"#"+e.point.lat;
         infoWindow = new BMapLib.SearchInfoWindow(map, content, {
             title: "nyBike", //标题
             searchTypes: [
                 BMAPLIB_TAB_SEARCH,   //周边检索
                 // BMAPLIB_TAB_TO_HERE,  //到这里去
                 // BMAPLIB_TAB_FROM_HERE //从这里出发
             ]
         });
         infoWindow.open(e.point);
     });

 // 定义一个控件类，左上角的两个控件
 function SearchControl(){
     // 设置默认停靠位置和偏移量
     this.defaultAnchor = BMAP_ANCHOR_BOTTOM_LEFT;    //相对于左下角
     this.defaultOffset = new BMap.Size(85, 20);    //相对于图标左下角的位置

 }
 // 通过JavaScript的prototype属性继承于BMap.Control
 SearchControl.prototype = new BMap.Control();
 // 自定义控件必须实现initialize方法，并且将控件的DOM元素返回
 // 在本方法中创建个div元素作为控件的容器，并将其添加到地图容器中
 SearchControl.prototype.initialize = function(map){
     var div=$("<div ><input id='start' type='button' value='startPoint'>" +
         "<input id='end' type='button' value='endPoint'>"+
         "<input id='go' type='button' value='Go now'>" +"</div>");
     $(map.getContainer()).append(div);//将以上的html添加到地图中覆盖

     $("#go").css("border-radius",8,"fontSize",2);
     $("#start").css("border-radius",8,"fontSize",2);
     $("#end").css("border-radius",8,"fontSize",2);
     $("#go").on("click",function(){ //按钮点击后

         go();
         // var local = new BMap.LocalSearch(map, {
         //     renderOptions:{map: map}
         // });
         // local.search(document.getElementById(key));
     });
     $("#start").on("click",function(){ //按钮点击后
         pois=[];
         pathPoint = [];

         if (infoWindow!=null)
         {
             var lngLat=infoWindow.getContent();
             console.log(lngLat);
             //string--》string
             lngLat=lngLat.split('#')
             //string--》string
             lngLat=lngLat.toString().replace(/"/g,"");
             //string
             console.log(typeof lngLat);
             //string--》array
             lngLat=lngLat.split(',')
             //object
             // console.log(typeof lngLat);
             // console.log(lngLat);
             //
             console.log(parseFloat(lngLat[0]));
             console.log(parseFloat(lngLat[1]));
             // startPoint.lng=parseFloat(lngLat[0]);
             // startPoint.lat=parseFloat(lngLat[1]);

             startPoint=new BMap.Point(parseFloat(lngLat[0]),parseFloat(lngLat[1]));
             console.log(startPoint);
         }
         else
             alert("请先在地图上右键选择起点");
     });

     $("#end").on("click",function(){ //按钮点击后
         pois=[];
         pathPoint = [];
         if (startPoint.lat==null)
         {
             alert("请先选择起点");
         }
         else if (infoWindow==null)
         {
             alert("请先在地图上右键选择终点");
         }
         else if (infoWindow&&startPoint.lat)
         {
             var lngLat=infoWindow.getContent();
             console.log(lngLat);
             //string--》string
             lngLat=lngLat.split('#')
             //string--》string
             lngLat=lngLat.toString().replace(/"/g,"");
             //string
             console.log(typeof lngLat);
             //string--》array
             lngLat=lngLat.split(',')
             //object
             // console.log(typeof lngLat);
             // console.log(lngLat);
             //
             // console.log(parseFloat(lngLat[0]));
             // console.log(lngLat[1]);
             endPoint=new BMap.Point(parseFloat(lngLat[0]),parseFloat(lngLat[1]));
             console.log(endPoint);
         }
     });

     // 将DOM元素返回
     return div[0];
 }
 map.addControl(new SearchControl()); //将自定义的控件添加到地图中



 var pathPoint = [];
 /*请求函数*/
 function go() {
     //lat 纬度 lng 经度
     //hk ak q3jUyxuogEGcjQkIyldM0kXrNbKswPVn
     //ry ak UFwnBlaYvWbFBVlf7haohC2tXmKxTeLW
     //yz ak v2Ew49TYAN4i1AqnChf2mOqDK54EXpkw
     if (startPoint.lat&& startPoint.lng&&endPoint.lat&&endPoint.lng)
     {
         if (startPoint.lat==endPoint.lat&&startPoint.lng==endPoint.lng)
         {
             alert('起点和终点一样，请重新选择');
         }
         else
         {
             var url = 'http://api.map.baidu.com/direction_abroad/v1/driving?origin=' + startPoint.lat + ',' + startPoint.lng +
                 '&destination=' + endPoint.lat + ',' + endPoint.lng + '&ak=q3jUyxuogEGcjQkIyldM0kXrNbKswPVn';
             //http://api.map.baidu.com/direction_abroad/v1/driving?origin=40.702963,-73.907852
             // &destination=40.625416,-73.960852&ak=R20nYyqmh1I3p8l5lGxHyrFAQj0BiPtO

             console.log(startPoint);
             console.log(endPoint);
             // 跨域请求
             $.ajax({
                 url: url,
                 type: 'get',
                 dataType: 'jsonp',  // 请求方式为jsonp
                 crossDomain: true,
                 success: function (infoData) {
                     // 用这个数据研究返回的数据的格式
                     console.log(infoData);
                     // 获取数据中的路线数组，因为可能返回多个路线规划方案
                     var routesArr = infoData.result.routes;
                     // 遍历路线数组
                     // for (var index in routesArr) {
                     // 一种路线规划方案
                     var route = routesArr[0];
                     // 获取该方案中的步骤数组，因为可能到目标要经过多个步骤
                     var stepsArr = route.steps;
                     console.log(stepsArr);
                     // 遍历步骤数组
                     for (var index in stepsArr) {
                         // 一个具体步骤
                         var step = stepsArr[index];
                         // 步骤中有path
                         console.log(step.path);
                         step.path=String(step.path).replace(/;/g,'","');
                         step.path=step.path.replace(/"/g,'').split(',');
                         console.log(step.path);
                         for(var j=0;j<step.path.length;j++)
                             pathPoint.push(parseFloat(step.path[j].valueOf()));
                         console.log(pathPoint);
                         // }
                     }
                     console.log("draw");
                     draw();
                 }});
         }

     }
         else{
             alert("请先选择好起点和终点");
     }

     }



 // 创建polyline对象
 function draw() {
     map.centerAndZoom(startPoint,18);
     for(var j=0;j<pathPoint.length;j=j+2)
     {
         var obj=new BMap.Point(pathPoint[j],pathPoint[j+1])
         pois.push(obj)
         console.log(pois);
     }
     //
     //
     var sy = new BMap.Symbol(BMap_Symbol_SHAPE_BACKWARD_OPEN_ARROW, {
         scale: 0.6,//图标缩放大小
         strokeColor:'#fff',//设置矢量图标的线填充颜色
         strokeWeight: '2',//设置线宽
     });
     var icons = new BMap.IconSequence(sy, '10', '30');
     var  polyline =new BMap.Polyline(pois, {
         enableEditing: false,//是否启用线编辑，默认为false
         enableClicking: true,//是否响应点击事件，默认为true
         icons:[icons],
         strokeWeight:'8',//折线的宽度，以像素为单位
         strokeOpacity: 0.8,//折线的透明度，取值范围0 - 1
         strokeColor:"#ff0000" //折线颜色
     });
     map.addOverlay(polyline);          //增加折线
     //清除
     polyline.addEventListener('dblclick',function (e) {
         polyline.hide();
         map.centerAndZoom(center,15);
     })
 }
 /*
 **Late-whale Code Area  End
 */

// LRY's private code segment
// 保存站点经纬度
var staLocateInfoMap = new Map();

// 设置搜索按钮点击事件
$('#btn_submit').click(function() {
	// 获取搜索框的输入内容
	var inputStation = $("#input_stationName").val();
	// 根据输入站名寻找站点
	var obj = staLocateInfoMap.get(inputStation);
	// 如果站名合法
	if (obj != null) {
		// 将该站点设为地图中心点
		var newPoint = new BMap.Point(obj.lon, obj.lat);
		map.setCenter(newPoint);

		// 寻找被输入的站点
		for ( var index in markerArr) {
			if (markerArr[index].stationId == obj.stationId) {
				openInfoCard(markerArr[index], obj.stationId);
			}
		}

		console.log("地图中心点已更新");
	} else {
		console.log("没有找到该站点");
	}
});

// end

